"""
题目描述:
从前有个村庄，村民们喜欢在各种田地上插上小旗子，旗子上标识了各种不同的数字。
某天集体村民决定将覆盖相同数字的最小矩阵形的土地分配给村里做出巨大贡献的村民，请问此次分配土地，做出贡献的村民种最大会分配多大面积?

输入描述
第一行输入 m 和 n，

m 代表村子的土地的长
n 代表土地的宽
第二行开始输入地图上的具体标识
输出描述
此次分配土地，做出贡献的村民种最大会分配多大面积

备注
旗子上的数字为1~500，土地边长不超过500
未插旗子的土地用0标识

用例1
输入

3 3
1 0 1
0 0 0
0 1 0

输出

9

说明

土地上的旗子为1，其坐标分别为(0,0)，(2,1)以及(0,2)，为了覆盖所有旗子，矩阵需要覆盖的横坐标为0和2，纵坐标为0和2，所以面积为9，即（2-0+1）*（2-0+1）= 9

用例2
输入

3 3
1 0 2
0 0 0
0 3 4

输出

1

说明：由于不存在成对的小旗子，故而返回1，即一块土地的面积。
"""


def max_coverage_area(m, n, land):
    """
    :param m:
    :param n:
    :param land:
    :return:
    """
    flag_dict = {}
    for i in range(m):
        for j in range(n):
            flag = land[i][j]
            if flag != 0:
                if flag not in flag_dict:
                    flag_dict[flag] = [(i, j)]
                else:
                    flag_dict[flag].append((i, j))

    max_area = 0
    for flag in flag_dict:
        flag_coordinates = flag_dict[flag]
        min_x = min(coord[0] for coord in flag_coordinates)
        max_x = max(coord[0] for coord in flag_coordinates)
        min_y = min(coord[1] for coord in flag_coordinates)
        max_y = max(coord[1] for coord in flag_coordinates)
        area = (max_x - min_x + 1) * (max_y - min_y + 1)
        max_area = max(max_area, area)

    return max_area


# 读取输入
m, n = map(int, input().split())
land = []
for _ in range(m):
    land.append(list(map(int, input().split())))

# 计算最大覆盖面积
result = max_coverage_area(m, n, land)
print(result)
